注意!今日所填 IP 皆為假資訊,請根據自己拿到的機器 IP 進行填寫。
大家可以想想,Ansible 需要同時控制這麼多台機器,總不可能平白無故的知道這些機器的資訊,更不可能將這些機器資訊存放在記憶體裡面,所以需要有一份檔案來記錄這些機器的資訊。
換句話說也可以把 Inventory 當作一份『通訊錄』,上面記著每一台機器的 IP、User 等等...
Ansible 會依據 Inventory 的資訊尋找目標機器,並在每台機器上執行對應任務。
在工作目錄下建立檔案 inventory.ini
:
[web]
192.168.0.1
192.168.0.2
[db]
192.168.0.3
這裡我們定義了兩組主機:
Ansible 連線到遠端機器主要是透過 SSH,所以要先確認自己可以以 SSH 登入目標主機(必要時可用 -u
指定使用者,或在 inventory 設定 ansible_user
;私鑰可用 --private-key
或在 inventory 設定 ansible_ssh_private_key_file
)。
在 Day 01 的時候有跟大家介紹過 ping 這個 Ansible 模組,所以這次也透過這個模組來測試。
ansible all -i inventory.ini -m ping
也可以使用完整模組名稱:
ansible all -i inventory.ini -m ansible.builtin.ping
如果有成功,會看到類似這樣的輸出:
192.168.0.1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.0.2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.0.3 | SUCCESS => {
"changed": false,
"ping": "pong"
}
小提醒:可以先檢查 inventory 是否可被解析:
ansible-inventory -i inventory.ini --list
當然如果你對於 YAML 比較擅長的話,inventory 也可以用 YAML 來撰寫哦(通常檔名會取為 inventory.yaml
,使用時請改成 -i inventory.yaml
)。
web:
hosts:
web-1:
ansible_host: 192.168.0.1
web-2:
ansible_host: 192.168.0.2
db:
hosts:
db-1:
ansible_host: 192.168.0.3
筆者比較喜歡 YAML 的寫法,這部分就看大家的喜好決定了哈哈
進一步也可以在 ansible.cfg
指定預設 inventory,這樣就能省略 -i
:
[defaults]
inventory = ./inventory.ini
又來到每日作業時間,今天呢希望讀者們可以建立自己的 inventory.ini,並且成功去測試所有主機的連線。
inventory.ini
。ansible all -i inventory.ini -m ping
測試所有主機。web
group 的主機(tips:ansible web -i inventory.ini -m ping
)。今天我們認識了 Inventory,明天就要來使用 Ansible 在遠端機器上安裝套件嘍!